package com.atguigu.springcloud.com.atguigu.myrule;

import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @USER: dayu Administrator
 * @DATE: 2020/3/25
 * @DESCRIPTION: 自定义Ribbon负载均衡的方案
 * 负载均衡的接口为IRule
 *
 * 负载均衡算法：
 *      rest接口第几次请求数 %服务器集群总数量=实际调用服务器的下标
 *      每次服务器重启后，rest接口计数从1开始
 *List<Servicelnstance> instances = discoveryClient.getInstances("CLOUD PAYMENT SERVICE");
 * 如:
 * List [0] instances = 127.0.0.1:8002
 * List [1] instances = 127.0.0.1:8001
 * 8001+ 8002 组合成为集群，它们共计2台机器，集群总数为2，按照轮询算法原理:
 * 当总请求数为1时: 1 %2 =1对应下标位置为1，则获得服务地址为127.0.0.1:8001
 * 当总请求数位2时: 2 % 2 =0对应下标位置为0，则获得服务地址为127.0.0.1:8002
 * 当总请求数位3时: 3 %2 =1对应下标位置为1，则获得服务地址为127.0.0.1:8001
 * 当总请求数位4时: 4 % 2 =0对应下标位置为0，则获得服务地址为127.0.0.1:8002
 * 如此类推...
 */
@Configuration
public class MyselfRule {

    @Bean
    public IRule myRule() {
        return new RandomRule();
    }
}
